package borrador;

import java.util.LinkedList;
import java.util.List;

import logica.Atributo;
import logica.AtributoIdentificadorFaltanteException;
import logica.AtributoRepetidoException;
import logica.AtributoSimple;
import logica.Diagrama;
import logica.Entidad;
import logica.EntidadIdentificadoraFaltanteException;
import logica.EntidadRepetidaException;
import logica.EntidadRol;
import logica.IdExternoInexistenteException;
import logica.Identificador;
import logica.IdentificadorVacioException;
import logica.Proyecto;
import logica.Relacion;
import logica.RelacionException;
import logica.SinNombreException;
import logica.TipoDeEntidad;
import logica.TipoDeRelacion;

/* para probar la edición de una entidad */

public class AlertaEntidad {
	
	private Proyecto proyecto;
	
	private Entidad entidadAlerta;
	private Entidad entidadPlazo;
	
	private Entidad entidadAuxiliar1;
	private Entidad entidadAuxiliar2;
	private Entidad entidadAuxiliar3;
	
	private Entidad entidadSoyIgual;

	private Relacion relacionTieneUn;
	
	public AlertaEntidad() throws RelacionException, SinNombreException, EntidadRepetidaException, IdExternoInexistenteException, AtributoRepetidoException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException
	{
		crearEntidadAlerta();
		crearEntidadPlazo();

		crearRelacionTieneUn();
		
		crearEntidadesAuxiliares();
		
		crearProyecto();
	}
	
	public Proyecto getProyecto() {
		return proyecto;
	}
	
	public Entidad getEntidadAuxiliar1() {
		return entidadAuxiliar1;
	}

	public Entidad getEntidadAuxiliar2() {
		return entidadAuxiliar2;
	}

	public Entidad getEntidadAuxiliar3() {
		return entidadAuxiliar3;
	}

	public Entidad getEntidadSoyIgual() {
		return entidadSoyIgual;
	}
	
	public Entidad getEntidadAlerta() {
		return entidadAlerta;
	}

	public Entidad getEntidadPlazo() {
		return entidadPlazo;
	}
	
	public Relacion getRelacionTieneUn() {
		return relacionTieneUn;
	}
	
	private void crearEntidadesAuxiliares() throws SinNombreException 
	{
		entidadAuxiliar1 = new Entidad("auxiliar1");
		entidadAuxiliar1.setTipo(TipoDeEntidad.PROGRAMADA);
		
		entidadAuxiliar2 = new Entidad("auxiliar2");
		entidadAuxiliar2.setTipo(TipoDeEntidad.PROGRAMADA);
		
		entidadAuxiliar3 = new Entidad("auxiliar3");
		entidadAuxiliar3.setTipo(TipoDeEntidad.PROGRAMADA);
		
		entidadSoyIgual = new Entidad("estoy repetida");
		entidadSoyIgual.setTipo(TipoDeEntidad.HISTORICA);
	}
	
	private void crearEntidadPlazo() throws SinNombreException
	{
		entidadPlazo = new Entidad("Plazo");
		entidadPlazo.setTipo(TipoDeEntidad.COSA);		
		
	}

	private void crearEntidadAlerta() throws SinNombreException, AtributoRepetidoException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException
	{
		entidadAlerta = new Entidad("Alerta");
		entidadAlerta.setTipo(TipoDeEntidad.COSA);	
		
		Atributo nombre = new AtributoSimple("nombre");
		Atributo responsable = new AtributoSimple("responsable");
		Atributo umbral = new AtributoSimple("umbral");
		
		entidadAlerta.agregarAtributo(nombre);
		entidadAlerta.agregarAtributo(responsable);
		entidadAlerta.agregarAtributo(umbral);

		
		Identificador id1 = new Identificador();
		id1.agregarAtributoIdentificador(nombre);
		Identificador id2 = new Identificador();
		id2.agregarAtributoIdentificador(responsable);
		
		entidadAlerta.agregarIdentificador(id1);
		entidadAlerta.agregarIdentificador(id2);
	}
	
	private void crearRelacionTieneUn() throws RelacionException, SinNombreException, AtributoRepetidoException
	{
		List<EntidadRol> entidadesRol = new LinkedList<EntidadRol>();
		
		entidadesRol.add(new EntidadRol(entidadAlerta, "", 1, -1));
		entidadesRol.add(new EntidadRol(entidadPlazo, "", 1, 1));		
		
		relacionTieneUn = new Relacion("tiene un", entidadesRol);
		relacionTieneUn.setTipo(TipoDeRelacion.ASOCIACION);
	}

	private void crearProyecto() throws SinNombreException, EntidadRepetidaException, IdExternoInexistenteException
	{
		Diagrama diagramaPpal, diagramaHijo1, diagramaOtro;
		
		proyecto = new Proyecto("proyecto-alerta-entidad");
		
		diagramaPpal= proyecto.getDiagramaPpal();
		
		diagramaPpal.agregarObjetoDiagrama(entidadAlerta);
		diagramaPpal.agregarObjetoDiagrama(entidadPlazo);
		diagramaPpal.agregarObjetoDiagrama(entidadAuxiliar1);
		diagramaPpal.agregarObjetoDiagrama(relacionTieneUn);
		
		diagramaPpal.agregarObjetoDiagrama(entidadSoyIgual);
		
		diagramaHijo1 = diagramaPpal.crearDiagramaHijo("hijo1");
		
		diagramaHijo1.agregarObjetoDiagrama(entidadAuxiliar2);
		
		diagramaOtro = diagramaPpal.crearDiagramaHijo("otro hijo");
		
		diagramaOtro.agregarObjetoDiagrama(entidadAuxiliar3);
	}
}
